//package com.hershel.userservice.filter;
//
//import com.hershel.userservice.service.UserService;
//import io.jsonwebtoken.JwtParserBuilder;
//import io.jsonwebtoken.Jwts;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.stereotype.Component;
//import org.springframework.web.filter.OncePerRequestFilter;
//
//import javax.servlet.FilterChain;
//import javax.servlet.ServletException;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.security.SignatureException;
//
///**
// * 此拦截器用于拦截读取Header中的token并验证。
// */
//@Component
//public class JwtRequestFilter extends OncePerRequestFilter {
//
//    @Autowired
//    private UserService userService;
//
//    @Value("${jwt.secret:hershel-QAZ!@#wsx$%^123}")
//    private static String secret;
//
//
//    @Override
//    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
//        // 从header获取token
//        final String authorizationHeader = request.getHeader("Authorization");
//        String username = null;
//        String jwt = null;
//        // 检查Bearer前缀
//        if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
//            // 获取实际的token部分
//            jwt = authorizationHeader.substring(7);
//            try {
//                // 验证token并获取用户名
//                // 获取用户名或其他claims信息
//                username = Jwts.parser().setSigningKey(secret).parseClaimsJws(jwt).getBody().getSubject();
//            } catch (SignatureException e) {
//                // Token无效或篡改的异常处理
//                // 处理无效token的情况，例如返回401状态码等。
//            } catch (Exception e) {
//                // 其他异常处理，例如Token过期等。
//                // 处理其他异常情况，例如返回401状态码等。
//            }
//        } else {
//            // 处理没有提供token或格式不正确的情况。例如返回403状态码等。
//            // 处理未提供token的情况。例如返回403状态码等。
//        }
//        if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
//            // 如果用户名不为空且当前安全上下文没有认证信息，则进行认证。
//            // 根据用户名加载用户详情。通常需要实现UserDetailsService接口并重写loadUserByUsername方法。例如从数据库中查询用户信息并返回一个实现了UserDetails接口的实例。例如：new org.springframework.security.core.userdetails.User(username, userDetailsRepository.
//            UserDetails userDetails = this.userService.loadUserByUsername(username);
//        }
//    }
